package generic;

import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * @author ChangLiang
 * @date 2021/2/1
 */
public class ArrayMaker<T> {

    /**
     * 即使kind被存储为Class<T> ，擦除也意味着它实际将被存储为Class，没有任何参数。
     */
    private Class<T> kind;

    public ArrayMaker(Class<T> kind) {
        this.kind = kind;
    }

    @SuppressWarnings("unchecked")
    T[] create(int size) {
        // 因此，当你在使用它时，例如在创建数组时， Array.newInstance()实际上并未拥有kind所蕴含的类型信息
        // 因此这不会产生具体的结果，所以必须转型，这将产生一条警告
        return (T[]) Array.newInstance(kind, size);
    }

    public static void main(String[] args) {
        ArrayMaker<String> stringMaker =
                new ArrayMaker<String>(String.class);
        String[] stringArray = stringMaker.create(9);
        System.out.println(Arrays.toString(stringArray));
    }
}
